/**
 * 一、函数的定义
 * 在js中函数的定义分为四种
 * 1、声明式
 * 2、函数表达式
 * 3、IIFE
 * 4、箭头函数
 * 二、TS中定义函数
 * 1、声明式函数的定义
 * function 函数名(参数1:参数类型,参数2:参数类型):返回类型|void{
 * }
 * 注意：1）参数的类型是不能省略的 2）返回类型|void是可以省略的，因为可以根据类型推断完成返回类型的推断
 * 2、函数表达式
 * 1）只约束函数本身的参数和返回类型
 * 2）约束变量的类型
 * 3）两边都约束
 * 3、IIFE
 * 4、箭头函数
 *    1）只约束函数本身的参数和返回类型
 *    2）约束变量的类型
 *    3）两边都约束
 */
function fn1(arg1:number,arg2:number,arg3:number){return arg1+arg2+arg3}

const fn2=function(arg1:string,arg2:number,arg3:number):number{
    return +(arg1+arg2+arg3)
}
const fn3:(arg1:number,arg2:number,arg3:number)=>number=function(arg1,arg2,arg3){
    return arg1+arg2+arg3
}
function foo(arg:(arg1:number,arg2:number,arg3:number)=>number){
}
const fn4:(arg1:number,arg2:number)=>number=function(arg1:number,arg2:number):number{
    return arg1+arg2
}
;(function(arg1:number,arg2:number):number{
    return arg1+arg2
})(10,20)


const fn5=(arg1:number,arg2:number):number=>{
    return arg1+arg2
}
const fn6:(arg1:number,arg2:number)=>number=(arg1,arg2)=>{
    return arg1+arg2
}
const fn7:(arg1:number,arg2:number)=>number=(arg1:number,arg2:number):number=>{
    return arg1+arg2
}

const fn8=(arg1:number,arg2?:number)=>{

}
fn8(10,20)




